<!DOCTYPE html>
<html>
<head><title>Dioxide Reference</title></head>
<body>
<h3>Reference</h3>
<div style="margin-left:40px">
<h4>Creating Test Plan</h4>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">A test plan file is a python file, you can call predefined function <i>create_test_plan</i> to create a test plan object, and <i>create_test</i> to create a test object.<br>
<br>
<b>create_test_plan</b>(name, tests, machines, job_owners=None, start_time=None, finish_time=None, check_config=True, **create_job_args)<br>
<br>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px">Creates a test plan object.<br>
<br>
Parameters:<br>
</div>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px"><b>name</b>: the test plan name, used in the "Job Name" for all jobs scheduled<br>
<b>tests</b>: a list of test objects created by <i>create_test</i> function, each test represents a control file<br>
<b>machines</b>: a dict to specify machines, you can use any dargs acceptable to the <i>get_hosts</i> RPC call, you can also use keys start with "mdb_" to select machines using MDB<br>
<b>job_owners</b>: a list of job_owners, defaults to the current user, used to limit test results set<br>
<b>start_time</b>: a string in the format "2009-12-04 03:06:25" to specify the start time of the test plan execution, used to limit test results set<br>
<b>finish_time</b>: a string in the format "2009-12-04 03:06:25" to specify the finish time of the test plan execution, used to limit test results set<br>
<b>check_config</b>: when set to True, the first test is considered to be the ConfigCheck test and would be run before any other tests and after the last test<br>
<b>**create_job_args</b>: can take dargs acceptable to the <i>create_job</i> RPC call to change the default create job settings for the test plan<br>
<br>
</div>
</div>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px"><b>create_test</b>(path, job_name, duration, **create_job_args):<br>
<br>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px">Creates and returns a test object.<br>
<br>
Parameters:<br>
</div>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px"><b>path</b>: path to the control file, when path starts with "Autotest://" (case insensitive), the control file will be fetched from the server<br>
<b>job_name</b>: job_name is used in the "Job Name", it defaults to path's basename for local control files, and test name for tests fetched from the server<br>
<b>duration</b>: estimated time in number of hours the test runs, used to calculate test plan completion percentage, must be a positive integer<br>
<b>**create_job_args</b>: can take dargs acceptable to the <i>create_job</i> RPC call to override create job settings<br>
<br>
</div>
</div>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px"><b>Default create job settings are:</b><br>
<br>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px">priority: 'Medium'<br>
run_verify: True<br>
reboot_before: 'Never'<br>
reboot_after: 'Never'<br>
parse_failed_repair: True<br>
email_list: all users in job_owners<br>
timeout: duration + min(duration * 2, 24)<br>
<br>
For local control files, control_type, synch_count, dependencies and duration defaults to:<br>
<br>
control_type: 'Server'<br>

synch_count: 1<br>

dependencies: []<br>

duration: 1<br>
<br>
For control files fetched from Server, control_type, synch_count and dependencies can not be overridden. duration defaults to 1 for "SHORT" tests, 4 for "MEDIUM" and 12 for "LONG".<br>


<br>
</div>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">Reference for <i>get_hosts</i> and <i>create_job</i> RPC calls: <a href="http://www.google.com/url?q=http%3A%2F%2Fautotest%2Fafe%2Fserver%2Frpc_doc&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzerkiXTUd3gYjPZpcr1R_iJV0Q-Ew">http://autotest/afe/server/rpc_doc</a><br>
<br>
</div>
</div>
<div style="margin-left:40px">
<h4>Create Inspector</h4>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">Inspector is a class defined in a python file, the name must be "Inspector" and it must be derived from a predefined class "InspectorBase":<br>
<br>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px"><sub><code>class Inspector(InspectorBase):</code></sub><br>
<sub><code>&nbsp; pass</code></sub><br>
</div>
</div>
</div>
<div style="margin-left:80px"><br>
You can define the following methods in the Inspector:<br>
<br>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px"><b>pre_inspect_test_view</b>(self): called before any <i>inspect_test_view</i> calls<br>
<b>inspect_test_view</b>(self, test_view): called for each test_view,
you may modify the test_view object, returns False if the test_view should be
discarded from the test results set<br>
<b>post_inspect_test_view</b>(self): called after all <i>inspect_test_view</i> calls<br>
<br>
<b>pre_inspect_job_host_run</b>(self): called before any <i>inspect_job_host_run</i> calls<br>
<b>inspect_job_host_run</b>(self, run): called for each run, you may modify the run object, returns False if the run should be discarded from the test results set<br>
<b>post_inspect_job_host_run</b>(self): called after all <i>inspect_job_host_run</i> calls<br>
<br>
<b>pre_inspect_host</b>(self): called before any <i>inspect_host</i> calls<br>
<b>inspect_host</b>(self, host): called for each host,
you may modify the host object, returns False if the host should not be included in the test plan<br>
<b>post_inspect_host</b>(self): called after all <i>inspect_host</i> calls<br>
<br>
</div>
</div>
<div style="margin-left:80px">You can define arbitrary attributes for your Inspector's instance, they'll be exported to the dashboard.<br>
<br>
</div>
<div style="margin-left:80px">test_view object has the following attributes:<br>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px"><br>
<b>test_idx, job_idx, test_name, reason, test_started_time, test_finished_time, job_tag, job_name, job_owner, job_queued_time, job_started_time, job_finished_time, hostname, status, triage_info, labels</b><br>
<br>
</div>
</div>
<div style="margin-left:80px">run object is called "job_host_run" and has the following attributes and methods:<br>
<br>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px">attributes: <b>job_idx, job_tag, job_name, job_owner, hostname, job_queued_time, job_started_time, job_finished_time, triage_info, labels</b><br>
<br>
properties:<br>
</div>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px">
<div style="margin-left:40px"><b>status</b>: a string of "RUNNING", "GOOD", "TRIAGE NEEDED", "TRIAGED", "FAIL", "RESOLVED" or "INVALIDATED"<b><br>
symptoms</b>: reasons of its test views joined together<br>
<b>triage_info</b>: triage info, a user created test attribute<br>
</div>
</div>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px"><br>
methods:<br>
</div>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px">
<div style="margin-left:40px"><b>set_triage_info</b>(self, triage_info, commit=False): set triage info<br>
<b>mark_as_invalidated</b>(self, commit=False): add label "invalidated"<br>
<b>mark_as_resolved</b>(self, commit=False): add label "resolved"<br>
<b>mark_as_fail</b>(self, commit=False): add label "no rerun"<br>
<b>clear_labels</b>(self, commit=False): remove label "invalidate", "resolved" and "no rerun"<br>
</div>
</div>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px">
<div style="margin-left:40px"><br>
</div>
</div>
</div>
<div style="margin-left:80px">host object has the following attributes and methods:<br>
<br>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px">attributes: <b>id, hostname, locked, status, platform, labels, idle, notes, protection<br>
</b><br>
properties:<br>
</div>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px">
<div style="margin-left:40px"><b>notes</b>: user added notes to the host<br>
<b>protection</b>: host's protection level<br>
<b>state</b>: a list of strings, if not empty, Dioxide will not schedule jobs on it<br>
<b>mdb_state</b>: host's MDB state<br>
</div>
</div>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px"><br>
methods:<br>
</div>
</div>
<div style="margin-left:80px">
<div style="margin-left:40px">
<div style="margin-left:40px"><b>set_protection</b>(self, protection): change host's protection<br>
<b>set_notes</b>(self, notes, commit=False): change/add a note to the host object<br>
</div>
</div>
</div>
<div style="margin-left:80px">
<div style="margin-left:80px"><br>
</div>
</div>
<div style="margin-left:40px">
<h4>Cmdline Options:</h4>
</div>
</div>
</div>
</div>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>usage: main.py [options] test_plan</div>
<div><br>
</div>
<div>options:</div>
<div>&nbsp;&nbsp;-h, --help &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;show this help message and exit</div>
<div><br>
</div>
<div>&nbsp;&nbsp;-t CONFIG_CHECK_VALID_TIME_IN_HOUR, --config-check-valid-time-in-hour=CONFIG_CHECK_VALID_TIME_IN_HOUR</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>If check_config is True, Dioxide will run configcheck (the first test) before any other tests and after the last test.</i></div>
<div><i>It will schedule configcheck unless the last test run is a good configcheck run within the time frame specified&nbsp;<span style="font-style:normal"><i>by</i></span></i></div>
<div><i><span style="font-style:normal"><i>config_check_valid_time_in_hour (defaults to 1 hour).</i></span></i></div>
<div><i><br>
</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;--no-show-unusable-hosts, --nosuh</div>
<div>&nbsp;&nbsp;--show-busy-hosts, --sbh</div>
<div>&nbsp;&nbsp;--no-show-completed-hosts, --nosch</div>
<div>&nbsp;&nbsp;--no-show-triage-needed, --nostn</div>
<div>&nbsp;&nbsp;--no-show-schedule-adjustment, --nossa</div>
<div>&nbsp;&nbsp;--no-show-discarded-hosts, --nosdh</div>
<div>&nbsp;&nbsp;--log-sql-select, --lss</div>
<div>&nbsp;&nbsp;--log-test-results, --lr</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>The above options control which information is logged and&nbsp;outputted&nbsp;to screen.</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><br>
&nbsp;&nbsp;--disable-schedule-adjustment, --dsa<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>
<div style="margin-left:40px"><i>Do not use heuristics to adjust schedule, simply discard excessive hosts.</i><br>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;--no-limit-results-by-host, --nolrh</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>When specified, test results are not&nbsp;limited to the hosts specified in this test plan.</i></div>
<div><i><br>
</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;--show-results, --sr</div>
<div>&nbsp;&nbsp;--show-status, --ss</div>
<div>&nbsp;&nbsp;--show-stats, --st</div>
<div>&nbsp;&nbsp;--show-run-stats, --srt</div>
<div>&nbsp;&nbsp;--no-show-schedules, --nosc</div>
<div>&nbsp;&nbsp;--no-log-host-stats, --nolht</div>
<div>&nbsp;&nbsp;--log-hosts, --lh</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Controls which information is logged and outputted to screen.</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><br>
</div>
<div>&nbsp;&nbsp;--version</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Output version number and exit.</i></div>
<div><i><br>
</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;-i INTERVAL, --interval=INTERVAL</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Specify the interval in seconds that Dioxide sleeps between iterations.</i></div>
<div><i><br>
</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;-n, --dry-run</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Do not schedule jobs, just output what Dioxide would do.</i></div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;-p PORT, --port=PORT</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Specify the port for dashboard's http server.</i></div>
<div><i><br>
</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;--no-show-plan, --nosp</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px"><i>Do not output the test plan when Dioxide starts up.</i></blockquote>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><br>
</div>
<div>&nbsp;&nbsp;-v, --verbose</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Increase the logging level, can be specified multiple times.</i></div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;-q, --quiet</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Decrease the logging level, can be specified multiple times.</i></div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;-s MAX_LOG_SIZE_IN_MB, --max-log-size-in-mb=MAX_LOG_SIZE_IN_MB</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>The maximum log file size. Dioxide will create a new log file and back up the old one when this limit is reached.</i></div>
<div><i><br>
</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;--disable-signal-handlers, --dsh</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Do not install signal handlers: SIGHUP to wake Dioxide up, SIGTERM, SIGQUIT and SIGINT to kill it.</i></div>
<div><i><br>
</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div>&nbsp;&nbsp;-c INSPECTOR, --inspector=INSPECTOR</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><i>Specify the inspector to use with the test plan, will be reloaded for every iteration.</i></div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</blockquote>
<blockquote style="border:medium none;margin:0pt 0pt 0pt 40px;padding:0px">
<div>
<div>
<div>
<div style="margin-left:40px">
<div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div>
<div style="margin-left:40px">
<h4>Sripting Mode Builtin Objects</h4>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">2 objects "afe" and "tko" are provided if you want to make RPC calls directly to Autotest, references are <a href="http://www.google.com/url?q=http%3A%2F%2Fautotest%2Fafe%2Fserver%2Frpc_doc&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzerkiXTUd3gYjPZpcr1R_iJV0Q-Ew">http://autotest/afe/server/rpc_doc</a> and <a href="http://www.google.com/url?q=http%3A%2F%2Fautotest%2Fnew_tko%2Fserver%2Frpc_doc&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzcb-zhHo1DAvYIpZBNGSwUgzFOkXQ">http://autotest/new_tko/server/rpc_doc</a>.<br>
<br>
"dioxide" object provides the following attributes and methods:<br>
<br>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px">
<div style="margin-left:40px"><b>name</b>: test plan name<br>
<b>tests</b>: a list of tests object<br>
<b>hosts</b>: a list of hosts object owned by the test plan<br>
<b>job_host_runs</b>: a list of runs (test results)<br>
<b>host_job_results</b>: a dict of dicts of runs, keys are host and job<br>
<b>host_results</b>: a dict of runs, key is host<br>
<b>host_job_status</b>: a dict of status for each machine/test pair<br>
<b>overall_stats, test_stats, host_stats</b>: stats objects corresponding to the results page<br>
<b>overall_run_stats, test_run_stats, host_run_stats</b>: stats objects corresponding to the runtime page<br>
<br>
<b>setup_dashboard</b>(self, port=8000): start the dashboard on specified port<br>
<b>get_hosts</b>(self, **dargs): returns a list of host objects, dargs are django filters acceptable to <i>get_hosts</i> RPC call<br>
<b>create_job</b>(self, job_name, hosts, **overrides): schedules a job on hosts<br>
<b>get_results</b>(self, **dargs): returns a list of run objects, dargs are django filters acceptable to <i>get_detailed_test_views</i> RPC call<br>
<b>set_notes</b>(hosts, notes): add/change notes to multiple hosts<br>
<b>set_triage_info</b>(runs, triage_info): add/change triage info to multiple runs<br>
<b>mark_as_invalidated</b>(runs, update_objects=False): add label "invalidated"<br>
<b>mark_as_resolved</b>(runs, update_objects=False): add label "resolved"<br>
<b>mark_as_fail</b>(runs, update_objects=False): add label "no rerun"<br>
<b>clear_labels</b>(runs, update_objects=False): remove label "invalidated", "resolved" and "no rerun"<br>
</div>
</div>
</div>
<div style="margin-left:40px">
<div style="margin-left:40px"><br>
<br>
</div>
</div>
</div>
</div>
</div>
</body></html>

